/*************************************************
 * 描述：表格控件
 *
 * File：cxitable.h
 * Author：zhangzhiming@mozihealthcare.cn
 * Date：25-10-10
 * Update：
 * ************************************************/
#ifndef CXITABLE_H
#define CXITABLE_H

#include <QAbstractItemDelegate>
#include <controls/table/cxitablemodel.h>

#include <controls/export.h>
#include <controls/table/head.h>
class CxiTablePrivate;

class CXI_CONTROLS_EXPORT CxiTable : public QWidget
{
	Q_OBJECT

public:
	explicit CxiTable(QWidget* parent = nullptr);

	~CxiTable();


	void setModel(CxiTableModel* model);

	/**
	 * 设置列配置
	 * @param configs
	 */
	void setColumnConfigs(const QList<cxitable::GridColumnConfig>& configs);

	/**
	 * 添加单个分组
	 * @param column 分组列
	 * @param groupTitle 分组标题
	 */
	void addGroup(int column, const QString& groupTitle);

	/**
	 * 添加多个分组
	 * @param groupConfigs
	 */
	void addGroups(const QList<cxitable::GroupConfig>& groupConfigs);

	/**
	 * 移除分组
	 * @param columns
	 */
	void removeGroups(const QList<int>& columns);

	/**
	 * 设置项目代理
	 * @param delegate
	 */
	void setItemDelegate(QAbstractItemDelegate* delegate);

	void setItemDelegateForColumn(int column, QAbstractItemDelegate* delegate);

	void setItemDelegateForRow(int row, QAbstractItemDelegate* delegate);

	void setItemDelegateForCell(int row, int column, QAbstractItemDelegate* delegate);

	/**
	 * 展开或关闭所有列
	 */
	void expandAll();

	void collapseAll();

Q_SIGNALS:
	/**
	 * 分组展开
	 */
	void groupExpanded();

	/**
	 * 分组折叠
	 */
	void groupColExpanded();

public slots:
	void onFilter(int column, const QString& condition);

	void clearFilter();

protected slots:
	void rebuildGroup();

private:
	Q_DECLARE_PRIVATE(CxiTable)
	QScopedPointer<CxiTablePrivate> d_ptr;
};


#endif//CXITABLE_H